/**
 * Project of Vehicle Routing Problem with Time Windows implements 
 * some of well-known algorithms for solving VRPTW and presents new 
 * one.
 *
 * @author Michal Drobny  
 */

package logic.algorithm;

import logic.car.VehicleProvider;
import logic.destination.Destination;
import logic.evaluator.Evaluator;
import logic.route.Route;
import logic.restrictionAdapter.RestrictionAdapter;

/**
 * Represents interface for algorithm for solving VRP problem. Algorithm
 * reorganized the order of destinations for given route.
 * 
 * @author Michal Drobny
 * @date 3.10.2014
 */
public interface Algorithm {

	/**
	 * Logic is different for current algorithm, but in the end the list of
	 * destinations for route given as parameter is reorganized.
	 * 
	 * @param route
	 *            The route
	 * @param start
	 *            The start destination
	 * @param evaluator
	 *            The evaluator for this route
	 * @param restrictions
	 *            The list of restriction for current VRP problem
	 * @param vehicleProvider
	 *            The vehicle provider
	 * 
	 * @return The state of algorithm
	 */
	public AlgorithmResult compute(Route route, Destination start,
			Evaluator evaluator, RestrictionAdapter restrictionAdapter,
			VehicleProvider vehicleProvider);
}
